扩展支持

对于 VS Code 之类的 IDE 是如何支撑应用市场几百万的扩展各自的定制要求的呢? 答案是扩展点。扩展点是什么,以及有哪些扩展形式?

1. 扩展配置文件中的扩展点

对于 VS Code 扩展来说,扩展点是通过 package.json 中的 contributes 字段来定义的。例如:

{
  "contributes": {
    "commands": [
      {
        "command": "extension.sayHello",
        "title": "Hello World"
      }
    ],
    "menus": {
      "editor/context": [
        {
          "command": "extension.sayHello",
          "group": "navigation"
        }
      ]
    }
  }
}

其中有很多可扩展的功能,都可以在 contributes 中找到对应的扩展点。例如:

  1. menus.
  2. command.
  3. languages.
  4. views.
  5. viewContainers.
  6. ...

其中类似 menus 之类的扩展点,配置更加灵活,开发者可以通过在配置项中传入 when 条件语句,VS Code 会自动执行 when 句子,根据执行结构来决定是否渲染对应的 menus 来达到灵活的控制目的。when 条件句子,是 VS Code 使用最广泛、最强大的扩展能力,众多在线的编辑器例如腾讯文档、钉钉文档的工具栏,都参考了他们的实现。

2. 扩展 API

在扩展中通过 import vscode from 'vscode' 的形式调用 vscode 底层透出给扩展使用的能力。例如:

vscode.window.showInformationMessage("Hello World!");

vscode.openWith(vscode.Uri.file("path/to/file"), "vscode.diff");

3. 命令式的 Contribution

Last Updated:
Contributors: yiliang114